For many graphical user interface (UI) architectures the programming model requires that interactions with the UI controls be executed on the main (or UI) thread. Many asynchronous programming models execute the continuations (or callback functions) on an algorithmically or arbitrarily chosen thread amongst a pool of threads. This means that developers that wish to take advantage of asynchronous programming techniques must be careful to marshal any interactions with UI controls to the UI thread. This is oftentimes a source of bugs for programmers.